package com.lagou

/*
* 每瓶啤酒2元，
* 3个空酒瓶或者5个瓶盖可换1瓶啤酒。
* 100元最多可喝多少瓶啤酒？（不允许借啤酒）
* 思路：利用递归算法，一次性买完，然后递归算出瓶盖和空瓶能换的啤酒数
* 第一次：100 / 2 = 50瓶
* 第二次：(50+0) / 3 = 16 余 2空瓶, (50+0) / 5 = 10 余 0瓶盖,   合计：26瓶+2个空瓶
* 第三次：(26+2) / 3 = 9 余 1空瓶, (26+0) / 5 = 5 余 1瓶盖,     合计：14瓶 + 1空瓶 + 1瓶盖
* 第四次：(14+1) / 3 = 5 余 0空瓶, (14+1) / 5 = 3 余 0瓶盖,     合计：8瓶
* 第五次：(8+0) / 3 = 2 余 2空瓶, (8+0) / 5 = 1 余 3瓶盖,       合计：3瓶 + 2空瓶 + 3瓶盖
* 第六次：(3+2) / 3 = 1 余 2空瓶, (3+3) / 5 = 1 余 1瓶盖,       合计：2瓶 + 2空瓶 + 1瓶盖
* 第七次：(2+2) / 3 = 1 余 1空瓶, (2+1) / 5 = 0 余 3瓶盖,       合计：1瓶 + 1空瓶 + 3瓶盖
* 第八次：(1+1) / 3 = 0 余 2空瓶, (1+3) / 5 = 0 余 4瓶盖,       总计：0瓶 + 2空瓶 + 4瓶盖
* 兑换不了啤酒结束，总计喝了 50+26+14+8+3+2+1 = 104 瓶
* */
object Bear {

  def bear_(bottle: Int, cap: Int): Int = {
    //当不能兑换啤酒时，结束
    if (bottle / 3 + cap / 5 == 0) return 0
    //兑换啤酒数量
    val bear_count = bottle / 3 + cap / 5
    //兑换完剩余空瓶数量
    val bottle_ = bottle % 3
    //兑换完剩余瓶盖数量
    val cap_ = cap % 5
    println(s"兑换啤酒 $bear_count 瓶,剩余空瓶 $bottle_ 个 ,剩余瓶盖 $cap_ 个")
    println(s"喝完啤酒之后,剩余空瓶 ${bottle_ + bear_count} 个 ,剩余瓶盖 ${cap_ + bear_count} 个")
    //返回兑换的啤酒数量
    bear_count + bear_(bottle_ + bear_count, cap_ + bear_count)
  }

  def main(args: Array[String]): Unit = {
    //金额
    val money = 100
    //啤酒单价
    val price = 2
    //一次性买酒的数量
    val count = money / price
    println(s"100元买酒${count}瓶~,喝完之后剩余空瓶${count}个，剩余瓶盖${count}个")
    println("3个空酒瓶或者5个瓶盖可换1瓶啤酒")
    println("共计喝酒：" + (bear_(count, count) + count) + "瓶")
  }
}
